import {isNull} from "@/utils/validate.js";
import {validateLoginStatus} from "@/api/login.js";
import {POBrowser} from "js-pageoffice";

/**
 * 使用非模态的POBrowser窗口打开文档
 * @param url 必选参数，PageOffice控件所在组件的url
 * @param style 可选参数，打开窗口的外观样式，多个属性之间以英文分号分隔
 * @param params 可选参数，打开窗口所需参数
 */
export function pageofficeOpenFile(url, params) {
    validateLoginStatus().then(() => {
        POBrowser.openWindow(url, getPOBrowserWindowStyle(), params)
    })
}

/**
 * 给 PageOffice在线打开的PDF窗口的 自定义工具栏添加自定义按钮
 * @param caption 字符串类型。按钮的标题。如果 caption 定义为 "-"，表示此按钮是分隔线。
 * @param jsFunctionName 字符串类型。JavaScript 函数的名字。当用户点击当前按钮时触发此 JavaScript 函数。
 * @param iconIndex int类型。按钮图标的索引。PageOffice内置了若干图标，您可以选择使用其中的图标。默认值是 0。
 * @param isPDF 布尔类型。true：标识打开的是pdf文件； false：标识打开的是非 pdf文件
 */
function addCustomButton(caption, jsFunctionName, iconIndex, isPDF) {
    if (isPDF) {
        pdfctrl.AddCustomToolButton(caption, jsFunctionName , iconIndex)
    } else {
        pageofficectrl.AddCustomToolButton(caption, jsFunctionName , iconIndex)
    }
}

/**
 * 循环添加自定义按钮
 * @param btnArray 按钮参数组成的二维数组：[[caption1, jsFunctionName1, iconIndex1], [caption2, jsFunctionName2, iconIndex2], ...]
 * @param isPDF 布尔类型。true：标识打开的是pdf文件； false：标识打开的是非 pdf文件
 */
export function loopAddButtons(btnArray, isPDF) {
    if (!isNull(btnArray)) {
        for (let i = 0; i < btnArray.length; i++) {
            const btn = btnArray[i]
            addCustomButton(btn[0], btn[1], btn[2], isPDF)
        }
    }
}

/**
 * 根据所需自定义按钮筛选所需挂载的JS函数
 * @param customButtonsArray 自定义按钮参数组成的二维数组：[[caption1, jsFunctionName1, iconIndex1], [caption2, jsFunctionName2, iconIndex2], ...]
 * @param customButtonsCommonJsFunctions 自定义按钮所需的所有通用JS函数（不需要根据业务需求重写的js函数）
 * @returns {{}}
 */
export function filterCustomButtonsJsFunctions(customButtonsArray, customButtonsCommonJsFunctions)  {
    let customJsFunctions = {}
    //根据自定义按钮数组，筛选需要挂载的js函数
    if (!isNull(customButtonsArray)) {
        const customButtonsJsFuncNameArray = Object.keys(customButtonsCommonJsFunctions)
        for (let i = 0; i < customButtonsArray.length; i++) {
            let functionName = customButtonsArray[i][1]
            //若函数名后有()，先去除
            if (functionName.endsWith('()')) {
                functionName = functionName.replace('()', '')
            }
            if (customButtonsJsFuncNameArray.indexOf(functionName) >= 0) {
                customJsFunctions[functionName] = customButtonsCommonJsFunctions[functionName]
            }
        }
    }
    return customJsFunctions
}


/**
 * 打开的PageOffice窗口样式
 * @returns {string}
 */
export const getPOBrowserWindowStyle = () => {
    //获取窗口的可视宽度和高度
    const width = window.screen.availWidth
    const height = window.screen.availHeight
    //预留的与屏幕的间距，可根据需求自行调整
    const reserveWidth = 50
    const reserveHeight = 80
    //窗口的默认宽度、高度
    const defaultWidth = 1500
    const defaultHeight = 850
    return (width < defaultWidth || height < defaultHeight)
        ? `width=${width - reserveWidth}px;height=${height - reserveHeight}px;top=25;left=25;` : `width=${defaultWidth}px;height=${defaultHeight}px;`
}

export const getPOHtmlStyle = () => {
    return 'width:auto; height:100vh;'
}